package org.aerie.forest.core.frame.rebar.factory;

import org.aerie.forest.core.frame.rebar.entity.AbstractForestRebar;

/**
 * @description forest架构元素入库组件
 *
 * @author quark
 * @organization aerie
 * @date 2020年2月20日 下午4:44:20
 * @version 1.2.0
 */
public abstract class ForestRebarStorage implements ForestFactoryComponent {

	/**
	 * @description 单例标识符
	 * 
	 * @author quark
	 * @date 2020年2月20日 下午4:44:46
	 * @version 1.2.0
	 */
	protected boolean singletonFlag = false;

	/**
	 * @description forest架构元素入库
	 * @throws Exception 添加forest架构元素抛出的异常
	 *
	 * @date 2020年2月20日 下午4:45:19
	 * @version 1.2.0
	 */
	public final void putInStorage() throws Exception {
		// 获得forest架构元素
		AbstractForestRebar forestRebar = getForestRebar();
		// 校验合法性
		forestRebar.isLegal();
		// 注入容器
		ForestContainer.INSTANCE.addForestRebar(forestRebar);
	}

	/**
	 * @description 获得对应的forest架构元素
	 * @return forest架构元素
	 *
	 * @date 2020年2月20日 下午4:45:47
	 * @version 1.2.0
	 */
	protected abstract AbstractForestRebar getForestRebar();
}